package be.khleuven.kevinvranken;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JProgressBar;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.Timer;
import javax.swing.UIManager;

public class MijnTofFrame extends JFrame implements ActionListener {

	/**
         * 
         */
	private static final long serialVersionUID = 1L;

	private JLabel klokLabel;
	private Calendar kalender = Calendar.getInstance();
	private SimpleDateFormat datumFormat = new SimpleDateFormat("HH:mm ss");
	private JProgressBar tweedeProgressBar;
	private Timer timer = new Timer(100, this);

	@SuppressWarnings("serial")
	public MijnTofFrame() {

		try {
			UIManager.put("OptionPane.cancelButtonText", "Annuleren");
			UIManager.put("OptionPane.noButtonText", "Neen");
			UIManager.put("OptionPane.okButtonText", "Stop! Andy Time");
			UIManager.put("OptionPane.yesButtonText", "Ja");
			UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		} catch (Exception e) {
			try {
				UIManager
						.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
			} catch (Exception e1) {

			}

		}
		tweedeProgressBar = new JProgressBar(0, 1000);
		setLayout(new FlowLayout());
		setTitle("Mijn tof frame");
		setSize(800, 650);

		// Bij vervanging van een keylistener
		JRootPane rp = getRootPane();
		rp.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
				KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), "Hulp");

		rp.getActionMap().put("Hulp", new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				try {
					Hulp hulp = new Hulp();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});

		// Menubar voor JFrame
		JMenuBar menuBar = new JMenuBar();

		// Menubar aan het frame toevoegen
		setJMenuBar(menuBar);

		// Openklappende menus
		JMenu bestandMenu = new JMenu("Bestand");
		menuBar.add(bestandMenu);

		// Menus wat inhoud geven
		JMenuItem sluitenActie = new JMenuItem("Sluiten");

		// Knoppen toevoegen aan het menu
		bestandMenu.add(sluitenActie);

		// Tabel
		String[] kolomHoofding = { "Voornaam", "Achternaam", "Stad", "Waal?" };

		Object[][] data = { { "Kevin", "Vranken", "Aarschot", "Neen!" },
				{ "Andy", "Debrouwer", "Tienen", "ja" },
				{ "Wout", "Breugelmans", "Leuven", "Neen!" } };

		JTable table = new JTable(data, kolomHoofding);
		//table.setPreferredScrollableViewportSize(new Dimension(750, 70));
		table.setFillsViewportHeight(true);

		JScrollPane scrollPane = new JScrollPane(table);

		// Add the scroll pane to this panel.
		add(scrollPane);

		// Hulp
		add(new Label("Druk op F1 voor hulp"));

		// timer
		this.klokLabel = new JLabel("Klok gestopt");
		this.klokLabel.setHorizontalTextPosition(JLabel.CENTER);

		this.tweedeProgressBar.setVisible(false);

		add(this.klokLabel);
		add(tweedeProgressBar);
		add(new JButton(new ToggleKlokAction()));

		// Een listener toevoegen aan het 'Sluiten' menu-item. actionPerformed()
		// methode zal
		sluitenActie.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});

	}

	public static void main(String[] args) {
		MijnTofFrame me = new MijnTofFrame();
		me.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		me.setVisible(true);
	}

	private class ToggleKlokAction extends AbstractAction {
		private String startKlok = "Start Klok";
		private String stopKlok = "Stop Klok";
		private String klokStopped = "Klok gestopt";

		public ToggleKlokAction() {
			super();
			putValue(Action.NAME, startKlok);
		}

		public void actionPerformed(ActionEvent e) {
			if (MijnTofFrame.this.timer.isRunning()) {
				putValue(Action.NAME, startKlok);
				MijnTofFrame.this.timer.stop();
				MijnTofFrame.this.tweedeProgressBar.setVisible(false);
				MijnTofFrame.this.klokLabel.setText(klokStopped);
			} else {
				MijnTofFrame.this.actionPerformed(null);
				MijnTofFrame.this.tweedeProgressBar.setVisible(true);
				MijnTofFrame.this.timer.start();
			}
		}

	}

	public void actionPerformed(ActionEvent e) {
		this.kalender.setTimeInMillis(System.currentTimeMillis());
		this.klokLabel
				.setText(this.datumFormat.format(this.kalender.getTime()));
		int milliseconds = this.kalender.get(Calendar.MILLISECOND);

		this.tweedeProgressBar.setValue(milliseconds);
	}

	public void endExample() {
		this.timer.stop();
	}
}
